python环境下利用opencv进行数字识别(模板匹配)

您所在的位置:网站首页 opencv 字符识别 python环境下利用opencv进行数字识别(模板匹配)

python环境下利用opencv进行数字识别(模板匹配)

2023-08-18 21:57| 来源: 网络整理| 查看: 265

0.前言

昨天在CSDN上看到了一个用C++实现的字符数字识别,就照着他的方法写了一个关于python的数字识别。这次主要分为两大部分,分别为字符分割和模板匹配,下面直接看主内容吧。

1.字符分割

字符分割我主要是用下面的这张照片先进行将上面的数字分割,设计道德方法用水平像素分布和垂直像素分布

1.1图片的获取

我们使用的图片就是上图

1.2图片的水平分割

分割后为以上三张照片

分割的步骤为二值化=》计算水平方向的黑色点数=》根据黑色点数分布进行图片分割

下面直接看代码

#对图片进行水平分割,返回的是分割好的照片数组 def horizontalCut(img): (x,y)=img.shape #返回的分别是矩阵的行数和列数,x是行数,y是列数 pointCount=np.zeros(y,dtype=np.uint8)#每行黑色的个数 x_axes=np.arange(0,y) for i in range(0,x): for j in range(0,y): if(img[i,j]==0): pointCount[i]=pointCount[i]+1 plt.plot(x_axes,pointCount) start=[]#开始索引数组 end=[]#结束索引数组 #对照片进行分割 for index in range(1,y): #上个为0当前不为0,即为开始 if((pointCount[index]!=0)&(pointCount[index-1]==0)): start.append(index) #上个不为0当前为0,即为结束 elif((pointCount[index]==0)&(pointCount[index-1]!=0)): end.append(index) img1=img[start[0]:end[0],:] img2=img[start[1]:end[1],:] img3=img[start[2]:end[2],:] imgArr=[img1,img2,img3] for m in range(3): cv2.imshow(str(m),imgArr[m]) cv2.waitKey() plt.show() return imgArr

1.3照片的垂直分割

上图为切割后的照片

主要步骤为:求出图片垂直方向黑色点数=》进行图片切割

# 对图片进行垂直分割,传入的是二值图 def verticalCut(img,img_num): (x,y)=img.shape #返回的分别是矩阵的行数和列数,x是行数,y是列数 pointCount=np.zeros(y,dtype=np.float32)#每列黑色的个数 x_axes=np.arange(0,y) #i是列数,j是行数 tempimg=img.copy() for i in range(0,y): for j in range(0,x): # if j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3